#include <iostream>
#include <set>      // set
#include <string>       // string
#include <queue>
using namespace std;
//定义函数对象类
class cmp {
public:
    //重载 () 运算符
    bool operator ()(const string &a,const string &b) {
        //按照字符串的长度，做升序排序(即存储的字符串从短到长)
        return  (a.length() < b.length());
    }
};

template<typename T>
void f(T&& para){
    para++;
}

void bar(int& a){
    
}

int main() {
    //创建 set 容器，并使用自定义的 cmp 排序规则
    // std::set<string, cmp>myset{"http://c.biancheng.net/stl/",
    //                            "http://c.biancheng.net/python/",
    //                            "http://c.biancheng.net/java/"};
    // //输出容器中存储的元素
    // for (auto iter = myset.begin(); iter != myset.end(); ++iter) {
    //         cout << *iter << endl;
    // }
    // priority_queue<string,vector<string>,cmp> p;
    // p.push("abcd");
    // p.push("abc");
    // p.push("abcde");
    // while(!p.empty()){
    //     cout << p.top() << endl;
    //     p.pop();
    // }

    int i = 1;
    int&& j = std::move(i);
    cout << i << endl;
    cout << &i << endl;
    cout << &j << endl;
    j = 2;
    cout << i << endl;

    int x = 25;
    cout << x << endl;
    f(x);
    cout << x << endl;
    int arr[10];
    int (&var)[10] = arr;
    int* p = &x;
    const int* const &pp = p;

    return 0;
}